$(function(){

	// 打开登录框
	$('.login_btn').click(function(){
        $('.login_form_con').show();
	})
	
	// 点击关闭按钮关闭登录框或者注册框
	$('.shutoff').click(function(){
		$(this).closest('form').hide();
	})

    // 隐藏错误
    $(".login_form #mobile").focus(function(){
        $("#login-mobile-err").hide();
    });
    $(".login_form #password").focus(function(){
        $("#login-password-err").hide();
    });

    $(".register_form #mobile").focus(function(){
        $("#register-mobile-err").hide();
    });
    $(".register_form #imagecode").focus(function(){
        $("#register-image-code-err").hide();
    });
    $(".register_form #smscode").focus(function(){
        $("#register-sms-code-err").hide();
    });
    $(".register_form #password").focus(function(){
        $("#register-password-err").hide();
    });


	// 点击输入框，提示文字上移（*）
    $('.form_group').on('click',function(){
    $(this).children('input').focus()
    })

    $('.form_group input').on('focusin',function(){
        $(this).siblings('.input_tip').stop().animate({'top':-5,'font-size':12},'fast');
        $(this).parent().addClass('hotline');
    });

	

	// 输入框失去焦点，如果输入框为空，则提示文字下移
	$('.form_group input').on('blur focusout',function(){
		$(this).parent().removeClass('hotline');
		var val = $(this).val();
		if(val=='')
		{
			$(this).siblings('.input_tip').stop().animate({'top':22,'font-size':14},'fast');
		}
	})


	// 打开注册框
	$('.register_btn').click(function(){
		$('.register_form_con').show();
		generateImageCode()
	})


	// 登录框和注册框切换
	$('.to_register').click(function(){
		$('.login_form_con').hide();
		$('.register_form_con').show();
        generateImageCode()
	})

	// 登录框和注册框切换
	$('.to_login').click(function(){
		$('.login_form_con').show();
		$('.register_form_con').hide();
	})

	// 根据地址栏的hash值来显示用户中心对应的菜单
	var sHash = window.location.hash;
	if(sHash!=''){
		var sId = sHash.substring(1);
		var oNow = $('.'+sId);		
		var iNowIndex = oNow.index();
		$('.option_list li').eq(iNowIndex).addClass('active').siblings().removeClass('active');
		oNow.show().siblings().hide();
	}

	// 用户中心菜单切换
	var $li = $('.option_list li');
	var $frame = $('#main_frame');

	$li.click(function(){
		if($(this).index()==5){
			$('#main_frame').css({'height':900});
		}
		else{
			$('#main_frame').css({'height':660});
		}
		$(this).addClass('active').siblings().removeClass('active');
		$(this).find('a')[0].click()
	});

    // TODO 登录表单提交
    $(".login_form_con").submit(function (e) {
        e.preventDefault();
        var mobile = $(".login_form #mobile").val();
        var password = $(".login_form #password").val();

        if (!mobile) {
            $("#login-mobile-err").show();
            return;
        }

        if (!password) {
            $("#login-password-err").show();
            return;
        }

         // 组织请求参数
        params = {
            "mobile": mobile,
            "password": password

        };
        // 发起登录请求
        $.ajax({
                url: "/passport/login",  // 请求地址
                type: 'POST',  // 请求方式
                // js对象转换成json字符串
                data: JSON.stringify(params),  // 设置发送给服务器的 数 据 (把json对象转化为json字符串)
                contentType: "application/json",   // 设置发送给服务器的数据 格 式
                dataType: 'json',  // 设置返回的数据格式
                headers: {  // 请求头中加入X-CSRFToken参数
                    // getCookie 是把后端发送过来的响应头中的cookie中提取 csrf_token
                    "X-CSRFToken": getCookie("csrf_token")
                },
                // 回调函数
                success: function (resp) {  // resp  接收后端的返回值 (比如成功的返回值:  return jsonify(errno=RET.OK, errmsg="登录成功"))
                    if(resp.errno == '0'){
                        // 登录成功
                        // 刷新页面
                        window.location.reload()
                    }else{
                        // 登录错误提示
                        $("#login-password-err").html(resp.errmsg);
                        $("#login-password-err").show()
                    }
                }

            })



    });


    // TODO 注册按钮点击
    $(".register_form_con").submit(function (e) {
        // 阻止默认提交操作
        // 说明: 当点击提交,会执行submit方法,所以我要重写该方法,就是当前的函数,一来就开始阻止提交,才能实现自己的写法
        e.preventDefault();

		// 取到用户输入的内容
        var mobile = $("#register_mobile").val();
        var smscode = $("#smscode").val();
        var password = $("#register_password").val();

		if (!mobile) {
            $("#register-mobile-err").show();
            return;
        }
        if (!smscode) {
            $("#register-sms-code-err").show();
            return;
        }
        if (!password) {
            $("#register-password-err").html("请填写密码!");
            $("#register-password-err").show();
            return;
        }

		if (password.length < 6) {
            $("#register-password-err").html("密码长度不能少于6位");
            $("#register-password-err").show();
            return;
        }

        // 发起注册请求
        // 组织请求参数
        params = {
		    "mobile": mobile,  // 手机号码
            "sms_code": smscode,  // 短信验证码
            "password": password  // 未加密密码
        };

        // 发起注册请求
        $.ajax({
            url: "/passport/register",  // 请求地址
            type: "post",  // 请求方式
            data: JSON.stringify(params),  // 设置发送给服务器的 数 据 (把json对象转化为json字符串)
            contentType: "application/json",  // 设置发送给服务器的数据 格 式
            dataType: "json",  // 设置返回的数据格式
            headers: {  // 请求头中加入X-CSRFToken参数
                        "X-CSRFToken": getCookie("csrf_token")
                    },
            success: function (resp) {   // resp  接收后端的返回值 (比如成功的返回值: return jsonify(errno=RET.OK, errmsg="注册成功"))
                if(resp.errno == "0"){
                    // 注册成功
                    // 页面刷新
                    window.location.reload()
                }else{
                    // 错误显示
                    $("#register-password-err").html(resp.errmsg);   // 获取后端返回值中的键errmsgs对应的值----进行替换
                    $("#register-password-err").show()  // 然后显示出来给用户看
                }
            }
        })


    })
});

var imageCodeId = "";

// TODO: 生成一个图片验证码的编号，并设置页面中图片验证码img标签的src属性
function generateImageCode() {

     // 1.生成唯一编号UUID
    imageCodeId = generateUUID();
    // 2.构建get请求url 注意:后端提取的key是code_id
    var url = "/passport/image_code?code_id=" + imageCodeId;
    // 3.发送get请求：替换img标签的src属性（自动向url发送get请求获取一张图片显示）
    $(".get_pic_code").attr("src", url)

}

// 发送短信验证码
function sendSMSCode() {
    // 校验参数，保证输入框有数据填写
    // 防止暴力测试
    $(".get_code").removeAttr("onclick");
    var mobile = $("#register_mobile").val();
    if (!mobile) {
        $("#register-mobile-err").html("请填写正确的手机号！");
        $("#register-mobile-err").show();
        $(".get_code").attr("onclick", "sendSMSCode();");
        return;
    }
    var imageCode = $("#imagecode").val();
    if (!imageCode) {
        $("#image-code-err").html("请填写验证码！");
        $("#image-code-err").show();
        $(".get_code").attr("onclick", "sendSMSCode();");
        return;
    }

    // 组织请求参数 js对象
    var param = {
        "mobile" : mobile,
        "image_code": imageCode,
        "image_code_id": imageCodeId
    };

    // TODO 发送短信验证码
    $.ajax({
        url: "/passport/sms_code",
        // 请求方式
        type: "POST",
        // 将js对象转换成json字符串
        data: JSON.stringify(param),
        // 告诉后端发送的数据是json格式
        contentType: "application/json",
        // 后端返回的数据也是json格式
        dataType: "json",
        // resp是js对象
        success: function (resp) {

           if(resp.errno == "0"){
                // 发送短信验证码成功回调
                // 倒计时60秒，60秒后允许用户再次点击发送短信验证码的按钮
                var num = 60;
                // 设置一个计时器
                var t = setInterval(function () {
                    if (num == 1) {
                        // 如果计时器到最后, 清除计时器对象
                        clearInterval(t);
                        // 将点击获取验证码的按钮展示的文本回复成原始文本
                        $(".get_code").html("获取验证码");
                        // 将点击按钮的onclick事件函数恢复回去
                        $(".get_code").attr("onclick", "sendSMSCode();");
                    } else {
                        num -= 1;
                        // 展示倒计时信息
                        $(".get_code").html(num + "秒");
                    }
                }, 1000)

            }
            else{
                 // 表示后端出现了错误，可以将错误信息展示到前端页面中
                $("#register-sms-code-err").html(resp.errmsg);
                $("#register-sms-code-err").show();
                // 将点击按钮的onclick事件函数恢复回去
                $(".get_code").attr("onclick", "sendSMSCode();");
                // 如果错误码是4004，代表验证码错误，重新生成验证码
                if(resp.errno == "4004"){
                    // 再次生成一张图片验证码
                    generateImageCode()
                }
            }


        }
    })
}

// 调用该函数模拟点击左侧按钮
function fnChangeMenu(n) {
    var $li = $('.option_list li');
    if (n >= 0) {
        $li.eq(n).addClass('active').siblings().removeClass('active');
        // 执行 a 标签的点击事件
        $li.eq(n).find('a')[0].click()
    }
}

// 一般页面的iframe的高度是660
// 新闻发布页面iframe的高度是900
function fnSetIframeHeight(num){
	var $frame = $('#main_frame');
	$frame.css({'height':num});
}

function getCookie(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : undefined;
}

function generateUUID() {
    var d = new Date().getTime();
    if(window.performance && typeof window.performance.now === "function"){
        d += performance.now(); //use high-precision timer if available
    }
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = (d + Math.random()*16)%16 | 0;
        d = Math.floor(d/16);
        return (c=='x' ? r : (r&0x3|0x8)).toString(16);
    });
    return uuid;
}


// 退出登录前端请求
function login_out() {
    $.ajax({
            url: "/passport/login_out",
            type: 'DELETE',
            dataType: 'json',
            headers: {
                    "X-CSRFToken": getCookie("csrf_token")
            },
            // 回调函数
            success: function (resp) {
                if(resp.errno == '0'){
                    // 退出成功
                    // 刷新页面
                    window.location.reload()
                }
            }

    })
}